#ifndef JUGADOR_H_
#define JUGADOR_H_

#include <string>
#include <list>
#include "CartaDeObjetivos.h"
#include "TiradorDeDados.h"
#include "Territorio.h"
#include "Dado.h"

using namespace std;

class Jugador
{
private:
	string color;
	unsigned int ejercitos;
	list<Territorio*> territoriosBajoControl;
	CartaDeObjetivos* cartaDeObjetivos;
	unsigned int ejercitosParaOcupar;
	unsigned int dadosParaDefender;
	bool dadosTirados;
	TiradorDeDados* tiradorDeDados;
public:
	Jugador(string color, TiradorDeDados* tiradorDeDados);
	string getColor();
	void asignarEjercitos(unsigned int cantidadDeEjercitos);
	void quitarEjercitos(unsigned int cantidadDeEjercitos);
	list<Dado>* tirarDados(unsigned int cantidadDeDados);
	unsigned int getCantidadDeEjercitos();
	CartaDeObjetivos* getCartaDeObjetivos();
	void setCartaDeObjetivos(CartaDeObjetivos* cartaDeObjetivos);
	virtual ~Jugador();
	
	/**
	 * Devuelve la cantidad de dados que el jugador va a utilizar para defenderse de un ataque con
	 * "dadosDelAtacante" dados.
	 */
	//TODO::
	unsigned int getCantidadDadosParaDefender(unsigned int dadosDelAtacante) {
		return dadosParaDefender;
	}
	void setDadosParaDefender(unsigned int dadosParaDefender) {
		this->dadosParaDefender = dadosParaDefender;
	}
	
	/**
	 * Luego de un ataque que produce la eliminacion de todos los ejercitos del oponente, 
	 * el jugador debe indicar cuantos ejercitos desea mover a su nuevo territorio.
	 */
	unsigned int getCantidadDeEjercitosParaOcupar() {
		return ejercitosParaOcupar;
	}
	
	void setEjercitosParaOcupar(unsigned int ejercitosParaOcupar) {
		this->ejercitosParaOcupar = ejercitosParaOcupar;
	}
	
	bool equals(Jugador* jugador) {
		return (color == jugador->color);
	}
	string toString() {
		return "Jugador de color "+ color;
	}
};

#endif /*JUGADOR_H_*/
